﻿package app.model.proxy
{	
    import app.facade.App;    
	import app.facade.EApp;
	import app.model.vo.VariableVO;
	import com.adobe.serialization.json.JSON;
	import com.adobe.serialization.json.JSONDecoder;
	import com.hutra.utils.ArrayUtilities;
	import flash.system.Security;
    import org.puremvc.as3.interfaces.IProxy;
    import org.puremvc.as3.patterns.proxy.Proxy;
	
	import org.osflash.thunderbolt.Logger;
		
	/**
	 * @author hungconcon
	 */
	 
    public class AppProxy extends Proxy implements IProxy {
		
        public static const NAME:String = "AppProxy";
		
		private var variable:VariableVO;
		
		public var lista:Array = new Array();
		public var listb:Array = new Array();
		
		override public function onRegister():void {
			super.onRegister();
		}
		
		/**
		 * 
		 */
        public function AppProxy() {
			super(NAME);
        }
		/**
		 * Hàm đăng ký các proxy có phương thức load
		 * @param	value
		 */
		public function loadingProxy(value:String):void {
			lista.push(value);
		}
		public function loadedProxy(value:String):void {
			listb.push(value);
		}
		public function isCompleted():Boolean {
			return (lista.length == listb.length);
		}
		/**
		 * [0] & [1] sử dụng muốn test từ local lên server thông qua phương pháp giả lập URL, khôi, 
		 * ex: http://localhost/a.swf thay thế cho http://server.com/a.swf
		 * [2] sử dụng khi flash tham chiếu đến nhiều server, mỗi server có một cấu hình đặc biệt đối vối flash 
		 */
		public function load():void {
			if (variable == null) return;
			//[0]
			Security.allowDomain(variable.crossdomain);
			//[1]
			Security.allowInsecureDomain(variable.insecure);
			//[2]
			try {
				if (variable.policy != '') {
					var jsonstring:String = decodeURIComponent(variable.policy);
					if(jsonstring!=''){
						var domainlist:Array =  new JSONDecoder( jsonstring, true ).getValue();//JSON.parse(jsonstring) as Array;
						for (var i:int = 0; i < domainlist.length; i++){
							loadPolicyFile(domainlist[i]);
						}
					}
				}
			}catch (ex:Error) {
				Logger.debug("AppProxy.initSecurity.Error:"+ex.message);
			}
			sendNotification(App.LOAD_PROXY_DONE, NAME);
		}
		private function loadPolicyFile(domain:String):void {
			Security.loadPolicyFile(domain);
		}
		public function setVariable(value:VariableVO):void {
			variable = value;
		}
		
		
    }
}